這篇不會詳細介紹 API 的用法與說明,而是挑出幾個我比較有興趣的 API 來介紹,日後找時間好好研究一般。
Node.js 的事件循環是透過 C 的 libuv , C++ 則是 Chrome v8 的底層,因此 Node.js 其實可以不至是 Node.js ,而是 Node.js + C / C++ 。不過知道歸知道,讓我感到有興趣時看到 初探 nodejs 的 c++ addon ( 4 年前的文章,使用 Node.js v0.8 版本 ) 裡面簡單測試 Node.js 與 C++ 處理同一件事情所需要的時間。
var sv = module.exports = require('./lib/verify.js');
// 利用純 js 語法進行判斷
var ia = Array.isArray;
console.time('js');
for(var j=0;j<1000;j++){
ia([]);
ia('111');
isNaN(123);
isNaN('abc');
}
console.timeEnd('js')
// 利用 C++ 模塊進行判斷
var ia2 = sv.isArray;
var in2 = sv.isNumber;
console.time('c++');
for(var j=0;j<1000;j++){
ia2([]);
ia2('111');
in2(123);
in2('abc');
}
console.timeEnd('c++');
得到的結果明顯 C++ 的效率比 JS 好許多,但在 Node.js v6.9.2 執行 JS 已經改善許多,執行花費的時間約在 0.360ms - 0.412ms 。這讓我再思考不該把自己困在 Node.js 思維,之後也可以適度使用 C / C++ 來協助 Node.js ( 沒寫過 C / C++ :p ) 。
虛擬機是 v8 ,因此 Node.js 也擁有此功能 ( 沒想過 Node.js 本身就有 Sandbox 的功能 ) 。想了更多,可以看 騰訊全端 AlloyTeam 團隊 - 詳解NodeJs的VM模塊 。